home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 002 / wscon.arc / ARGLIST.PAS next >
Encoding:
Pascal/Delphi Source File  |  1985-06-20  |  2.6 KB  |  94 lines

  1. type
  2.     arglist_string = string[80];
  3. const
  4.     arglist_max = 20;
  5.     arglist_number : integer = -1;
  6. var
  7.     argvlist : array[1..arglist_max] of ^arglist_string;
  8.     i        : integer;
  9.  
  10.  
  11.  
  12.  
  13. function argv(num : integer) : arglist_string;
  14.  
  15. var
  16.     argument : arglist_string absolute cseg:$80;
  17.     newparm,parmline : arglist_string;
  18.     i,j : integer;
  19.     state : (leading_ws, non_quote, quoted, end_quote);
  20.     inchar : char;
  21.  
  22.     procedure saveparm;
  23.     begin
  24.       if arglist_number < arglist_max then begin
  25.         arglist_number := arglist_number+1;
  26.         new(argvlist[arglist_number]);
  27.         argvlist[arglist_number]^ := newparm;
  28.         newparm := '';
  29.         end;
  30.       end;
  31.  
  32. begin
  33.     if arglist_number = -1 then begin
  34.         arglist_number := 0;
  35.         parmline := argument+' ';
  36.         state := leading_ws;
  37.         newparm := '';
  38.         for i := 1 to length(parmline) do begin
  39.             inchar := parmline[i];
  40.             case state of
  41.  
  42.                 leading_ws: begin
  43.                     if inchar = '''' then state := quoted
  44.                     else if inchar <> ' ' then begin
  45.                         newparm := newparm+inchar;
  46.                         state := non_quote;
  47.                         end;
  48.                     end;
  49.  
  50.                 non_quote: begin
  51.                     if inchar = ' ' then begin
  52.                         saveparm;
  53.                         state := leading_ws;
  54.                         end
  55.                     else newparm := newparm+inchar;
  56.                     end;
  57.  
  58.                 quoted: begin
  59.                     if inchar = '''' then state := end_quote
  60.                     else newparm := newparm+inchar;
  61.                     end;
  62.  
  63.                 end_quote: begin
  64.                     if inchar = '''' then begin
  65.                         newparm := newparm+inchar;
  66.                         state := quoted;
  67.                         end
  68.                     else if inchar <> ' ' then begin
  69.                         newparm := newparm+inchar;
  70.                         state := non_quote;
  71.                         end
  72.                     else begin
  73.                         saveparm;
  74.                         state := leading_ws;
  75.                         end;
  76.                 end;
  77.             end;
  78.         end;
  79.         end;
  80.     if (num > 0) and (num <= arglist_number) then
  81.         argv := argvlist[num]^
  82.     else argv := '';
  83.     end;
  84.  
  85. function argc : integer;
  86. var
  87.     dummy : arglist_string;
  88.  
  89. begin
  90.     if arglist_number = -1 then dummy := argv(1); {force evaluation}
  91.     argc := arglist_number;
  92. end;
  93.  
  94.